package com.tjetc;

public class _9DeadLock {
    public static void main(String[] args) {
        /*
            演示死锁
            1. 一个线程需要执行要获取1个锁，但是这个锁现在被另一个线程所持有
            2. 另外一个线程需要执行要获取1个锁，但是这个锁现在被另一个线程所持有
            3. 这两个线程互相等待，谁也不会释放🔒导致死锁

         */
        MyThread thread1 = new MyThread();
        thread1.start();

        MyThread thread2 = new MyThread();
        thread2.flag = false;
        thread2.start();

    }
}


class MyThread extends Thread {
    // 创建两个🔒
    static Object object = new Object();
    static Object object1 = new Object();

    // 是否可以进入flag
    boolean flag = true;
    @Override
    public void run() {
        if (flag) {
            synchronized (object) {
                System.out.println(1);
                synchronized (object1) {
                    System.out.println(2);
                }
            }
        } else {
            synchronized (object1) {
                System.out.println(3);
                synchronized (object) {
                    System.out.println(4);
                }
            }
        }
    }
}
